#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
#include "mutex.h"

// initialiser le mutex
int mutex_init(mutex_t * mut) {
  mut->owner = NULL;
  mut->blckd_threads = NULL;
  return 0;
}

// verrouiller un mutex 
int mutex_lock(mutex_t * mut) {
  if (mut->owner == thread_self())
    perror("ERROR mutex already locked by this thread.\n");
  if (mut->owner == NULL) {
    // on prend le thread courant et on le place dans la liste d'attente du mutex. 
    // cf schedule.c et notre implémentation du changement dans la Glist
  }
  else 
    mut->owner = thread_self();
  return 0;
}

// dévérouiller un mutex
int mutex_unlock(mutex_t * mut) {
  thread_t tmp;
  if (mut->owner != thread_self())
    perror("ERROR trying to unlock a mutex not owned.\n");
  // propriétaire du mutex est le premier dans la liste des threads en attente.
  // si la liste de threads du mutex appelant est non nulle, on passe à l'élément suivant et l'on place l'ex-tête de liste en fin de la liste des threads actifs.
  return 0;
}
